/***
 * 权限校验
 * vue-router中的前置钩子函数 beforeEach(to,from,next)
 * 当进行路由跳转之前，进行判断 是否已经登录过，登陆过则允许访问非登录页面，否则回到登录页
 * 
 * to:即将要进入的目标路由
 * from：即将要离开的路由对象
 * next：是一个方法，可以指定路由地址，进行路由跳转
 */
import router from "./router"
import {getUserInfo} from "@/api/login"
/*
前置路由钩子函数
to ：即将要进入的目标路由对象
from ：当前导航正要离开的路由对象
next : 调用该方法，进入目标路由
*/
router.beforeEach((to,from,next)=>{
    //1、获取token值
    const token=localStorage.getItem("mxg-msm-token");
    // 1.2如果token不存在
    if(!token){
        // 如果访问的是非登录页面，让他回到登录页
        if(to.path!=="/login"){
            next({path: '/login'})
        }else{
            // 如果访问的是登录页面，直接跳转
            next()
        }
    }else{
        // 1.2如果可以获取到token
        // 访问的是登录页面，直接跳转目标路由
        if(to.path==="/login"){
            next();
        }else{
            // 如果访问的不是登录页面同时token存在，
            // 看是否有用户信息
            // 获取用户信息
            const userInfo=localStorage.getItem("mxg-msm-user");
            // 如果用户信息存在。直接跳转目标路由
            if(userInfo){
                next();
            }else{
                // 如果不存在，通过token获取用户信息
                getUserInfo(token).then(response=>{
                    const respUser=response.data;
                    // 如果用户信息存在
                    if(respUser.flag){
                        // 保存用户信息到本地，同时跳转到目标路由
                        localStorage.setItem("mxg-msm-user",JSON.stringify(respUser.data))
                        next()
                    }else{
                        // 如果用户信息不存在，重新登录
                        next({path: '/login'})
                    }
                })

            }

        }
    }
    
})
